#ifndef NEURON_TYPE_H
#define NEURON_TYPE_H

#include <nemo.hpp>
#include <math.h>
#include <vector>
#include <iostream>
#include <string.h>
#include <stdlib.h>

using std::vector;
using namespace nemo;

// Convenience class for specifying Iz-style neuron parameters
class NeuronType
{
protected:
  std::string type_;
  std::string name_;
  int num_params_;
  float* params_;

public:
  std::string getType(void) { return type_; }
  std::string getName(void) { return name_; }
  
  int getNumParams(void) { return num_params_; }
  const float* getParams(void) { return params_; }
};

class IzhikevichNeuronType : public NeuronType {
  
public:
  IzhikevichNeuronType(std::string name, int num_params, float* params);
  ~IzhikevichNeuronType(void);

  void setWeights(float min, float max);

  virtual float generateOutboundWeight(void);

protected:
  float min_out_weight_;
  float max_out_weight_;
  
};

#endif
